/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.facturacion.controlador;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.conexion.cConexion;
import sv.com.intesal.facturacion.bean.AsignarCaja;
import sv.com.intesal.facturacion.sql.SQLAsignarCaja;

/**
 *
 * @author ejerez
 */
public class AsignarCajaControlador {

    public List<AsignarCaja> getAsignarCajas() throws Exception {
        List<AsignarCaja> lista = new ArrayList<AsignarCaja>();
        try {
            ResultSet rs = cConexion.conectar().prepareStatement(SQLAsignarCaja.getAsignarCajas).executeQuery();
            while (rs.next()) {
                AsignarCaja ac = new AsignarCaja();

                /*ASIGNAR CAJA*/
                ac.setCodigo_ac(rs.getInt("codigo_ac"));
                ac.setFechahora(rs.getTimestamp("fechahora"));

                /*TIPO CAJA*/
                ac.setCodigo_tc(rs.getInt("codigo_tc"));
                ac.setNombre_tc(rs.getString("nombre_tc"));

                /* CAJA */
                ac.setCodigo_ca(rs.getInt("codigo_ca"));
                ac.setNombre_ca(rs.getString("nombre_ca"));
                ac.setSaldo_ca(rs.getDouble("saldo_ca"));
                ac.setEstado_ca(rs.getString("estado_ca"));

                /*SUCURSAL*/
                ac.setCodigo_s(rs.getInt("codigo_s"));
                ac.setNombre_s(rs.getString("nombre_s"));

                /*EMPLEADO*/
                ac.setCodigo_e(rs.getInt("codigo_e"));
                ac.setNombre_e(rs.getString("nombre_e"));
                ac.setApellido_e(rs.getString("apellido_e"));

            }
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public List<AsignarCaja> getAsignarCajas_x_Empleado() throws Exception {
        List<AsignarCaja> lista = new ArrayList<AsignarCaja>();
        try {
            ResultSet rs = cConexion.conectar().prepareStatement(SQLAsignarCaja.getAsignarCajas_x_Empleado).executeQuery();
            while (rs.next()) {
                AsignarCaja ac = new AsignarCaja();

                /*ASIGNAR CAJA*/
                ac.setCodigo_ac(rs.getInt("codigo_ac"));
                ac.setFechahora(rs.getTimestamp("fechahora"));

                /*TIPO CAJA*/
                ac.setCodigo_tc(rs.getInt("codigo_tc"));
                ac.setNombre_tc(rs.getString("nombre_tc"));

                /* CAJA */
                ac.setCodigo_ca(rs.getInt("codigo_ca"));
                ac.setNombre_ca(rs.getString("nombre_ca"));
                ac.setSaldo_ca(rs.getDouble("saldo_ca"));
                ac.setEstado_ca(rs.getString("estado_ca"));

                /*SUCURSAL*/
                ac.setCodigo_s(rs.getInt("codigo_s"));
                ac.setNombre_s(rs.getString("nombre_s"));

                /*EMPLEADO*/
                ac.setCodigo_e(rs.getInt("codigo_e"));
                ac.setNombre_e(rs.getString("nombre_e"));
                ac.setApellido_e(rs.getString("apellido_e"));

            }
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void deleteAsignarCaja(AsignarCaja ac) throws Exception {

        Connection cnn = null;
        PreparedStatement ps = null;
        try {
            cnn = cConexion.conectar();
            ps = cnn.prepareStatement(SQLAsignarCaja.deleteAsignarCaja);
            ps.setInt(1, ac.getCodigo_ac());
            ps.executeUpdate();

            Mensaje m = new Mensaje();
            m.messageInfo(m.getIeliminada());
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void mantenimientoAsiganarCaja(AsignarCaja ac) throws Exception {
        Connection cnn = null;
        PreparedStatement ps = null;
        try {

            cnn = cConexion.conectar();
            if (ac.getCodigo_ac() == null) {
                ps = cnn.prepareStatement(SQLAsignarCaja.deleteAsignarCaja);
            } else {
                ps = cnn.prepareStatement(SQLAsignarCaja.deleteAsignarCaja);
                ps.setInt(1, ac.getCodigo_ac());
            }


            ps.executeUpdate();
            Mensaje m = new Mensaje();
            if (ac.getCodigo_ac() == null) {
                m.messageInfo(m.getIinformation());
            } else {
                m.messageInfo(m.getImodificada());
            }
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public Boolean validar_Caja_x_Empleado(AsignarCaja ac) throws Exception {

        Connection cnn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            cnn = cConexion.conectar();
            ps = cnn.prepareStatement(SQLAsignarCaja.deleteAsignarCaja);
            ps.setInt(1, ac.getCodigo_ca());
            ps.setInt(2, ac.getCodigo_e());
            rs = ps.executeQuery();
            rs.next();

            if (rs.getInt("count") == 0) {
                return true; //no tiene la caja asignado a el.
            }
            return false; //ya tiene una esta caja asignado al Empleado
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
}
